index.md
Edit

코드 리뷰를 잘하는 방법:

  1. 코드 이해하기: 기능, 로직을 먼저 이해한 후 리뷰 시작.
  2. 작은 단위로 리뷰: 코드 변경 사항이 많으면 작게 나눠 리뷰.
  3. 명확한 기준: 코드 스타일, 성능, 유지보수성 등 기준에 맞춰 리뷰.
  4. 질문과 피드백: 가정하지 말고, 이해 안 되는 부분은 질문.
  5. 긍정적 피드백: 개선할 점뿐만 아니라 좋은 부분도 칭찬.
  6. 구체적 제안: 피드백은 가능한 대안을 제시하며 전달.
  7. 테스트 중요성 강조: 유닛 테스트 또는 기능 테스트가 있는지 확인.
  8. 정중한 태도: 감정을 배제하고, 건설적이고 존중하는 언어 사용.
  9. PR 목적에 집중: 변경 사항이 해결하고자 하는 문제나 기능에 집중.

코드를 이해하는 과정:

  1. 기능 파악: 코드를 작성한 목적과 해결하려는 문제를 파악.
  2. 요구사항 분석: 코드가 충족해야 할 요구사항(기능적, 비기능적)을 이해.
  3. 코드 흐름 읽기:
  4. 상위 구조(모듈, 클래스, 함수)부터 전체 흐름 파악.
    4.1. 데이터가 어떻게 이동하고 처리되는지 확인.
    4.2. 핵심 로직 분석: 주요 알고리즘이나 비즈니스 로직을 집중해서 분석.
  5. 의존성 확인: 다른 모듈, 라이브러리, 서비스와의 상호작용을 이해.
  6. 주석과 문서 참고: 주석, 문서, 코드 주석이 있으면 이를 통해 추가 정보를 얻음.
  7. 디버깅 및 실행: 코드를 실제로 실행하거나 디버깅하여 동작 방식 이해.
  8. 테스트 코드 검토: 테스트 코드가 있으면 이를 통해 코드의 의도와 결과를 확인.
  9. 변경 이력 확인: Git 등의 버전 관리 시스템에서 변경 이력을 확인해 코드가 왜 이렇게 작성되었는지 추적.

복잡하게 얽힌 파일 간 의존성을 잘 파악하는 방법:

  1. 의존성 시각화 도구 사용:
    1.1. SonarQube, CodeScene, Graphviz 등의 도구를 활용해 의존성 구조를 시각화.
    1.2. 파일 간의 상호작용, 함수 호출, 모듈 간 연결을 그래프로 파악.
  2. 모듈화 분석:
    2.1. 코드가 모듈화되어 있는지 확인하고, 각 모듈의 역할과 경계를 파악.
    2.2. 의존성이 지나치게 얽혀 있는 모듈(강한 결합)을 식별해 문제점을 확인.
  3. 파일 구조 시각화:
    3.1. 프로젝트 구조를 디렉토리별로 시각화해 어떤 파일이 주요 역할을 하는지 분석.
    3.2. IDE의 파일 구조 트리나 플러그인을 사용하여 탐색.
  4. 의존성 그래프 그리기:
    4.1. 코드에서 실제로 어떤 파일이 어떤 파일을 참조하는지 의존성 그래프 생성.
    4.2. 예를 들어 Python의 import graph를 생성하거나, JavaScript의 Webpack Visualizer를 활용해 모듈 의존성 분석.
  5. 디펜던시 분석 도구:
    5.1. npm(Node.js), Maven(Java), pipdeptree(Python) 등 패키지 의존성 분석 도구를 사용.
    5.2. 패키지나 라이브러리 간의 의존성을 파악해 파일 간 의존성 단서를 얻음.
  6. 단일 파일 분석:
    6.1. 복잡한 의존성을 한 번에 분석하려 하기보다, 중요한 파일을 선택해 해당 파일과 의존성이 얽힌 파일들을 차례로 추적.
    6.2. 의존성 깊이를 줄이면서 단계적으로 분석.
  7. 순환 의존성 탐지:
    7.1. 순환 의존성(circular dependency)을 찾아 해결하거나 최소화.
    7.2. 순환 의존성은 의존성 문제를 더욱 복잡하게 만들므로 이를 찾아 해결하면 의존성 복잡성이 줄어듦.
  8. 동작 분석:
    8.1. 코드를 실제로 실행하고 트레이싱(logging) 도구를 활용해 파일 간 호출 관계를 실시간으로 확인.
    8.2. 디버거로 함수 호출 스택을 추적하여 파일 간 상호작용 확인.
  9. 레거시 코드 리팩토링:
    9.1. 의존성이 과도하게 복잡한 경우, 불필요한 의존성을 줄이고 코드를 리팩토링하는 것도 필요.
    9.2. 의존성을 최소화하고, 각 파일이나 모듈의 책임을 명확히 분리.
  10. 도메인 지식 습득:
    10.1. 코드가 구현하는 비즈니스 로직이나 도메인을 이해하면, 의존성 관계를 더 쉽게 파악 가능.
    10.2. 해당 도메인 내에서 어떤 파일이 주요 역할을 하는지 알게 되면 의존성 분석이 더 쉬워짐.
rhea-so commented at 2024-11-19 06:11:20

그럴듯한 당연한 얘기만 한다. 써먹을만한 꿀팁은 없는가?

rhea-so commented at 2024-11-19 06:18:55

나쁜 코드 리뷰의 특징:

  1. 비판적이고 공격적인 태도: 코드 리뷰에서 단순히 비판하고 공격적인 언어를 사용하여 개발자를 자극하는 경우.
  2. 구체성 부족: 문제점이나 개선점을 지적하지 않고 일반적인 피드백만 제공하는 경우 ("이 코드는 이상해요", "이건 잘못된 방식이에요").
  3. 무시하거나 감정적 반응: 개발자가 질문을 하면 무시하거나 감정적으로 반응하는 경우.
  4. 문제의 근본적인 원인 미제시: 코드의 문제를 지적하지만, 왜 그 코드가 문제가 되는지 혹은 어떻게 개선해야 하는지 설명하지 않는 경우.
  5. 비생산적인 지적: 코드의 작은 부분을 지나치게 집중하거나, 중요하지 않은 문제에 과도하게 시간과 에너지를 소비하는 경우.
  6. 다른 사람의 작업을 깎아내리기: 이전 코드 작성자의 스타일이나 방법을 폄하하는 등 다른 사람의 작업을 깎아내리는 태도.
  7. 개인의 스타일을 강요: 팀이나 프로젝트에서 정의된 규칙이나 스타일 가이드와 상관없이 개인적인 취향을 강요하는 경우.
  8. 복잡한 피드백: 너무 복잡하거나 이해하기 어려운 피드백을 제공하여, 리뷰 대상자가 혼란스러워하는 경우.
  9. 과도한 지적: 모든 작은 디테일에 대해 지적하여, 코드 작성자가 부담을 느끼게 만드는 경우.
  10. 칭찬이나 긍정적 피드백 부족: 문제점을 지적하는 것에 집중하여 긍정적인 피드백이나 칭찬이 없는 경우.
rhea-so commented at 2024-11-19 06:21:06

나쁜 코드 리뷰의 예시

"솔직히 말해서, 이 코드는 내가 본 것 중 가장 형편없어요. 이렇게 엉망인 코드를 제출한 걸 보면, 기본적인 프로그래밍 능력이 부족하다고 밖에 생각할 수 없어요. 처음부터 끝까지 모든 부분이 문제가 있어요. 코드의 흐름이 너무 끔찍해서 이해하기 힘들고, 이걸 읽는 내내 머리가 아팠습니다. 변수를 저렇게 짜놓은 이유를 도저히 알 수가 없어요. 이름만 보면 도대체 무엇을 의미하는지 전혀 감이 안 와요. 주석도 없어서 내가 어떤 기능을 구현하고 싶은지 전혀 알 수 없고, 그저 스스로가 이해한다고 생각하는 것 같은데, 다른 사람이 봤을 때는 완전 쓰레기 코드예요. 이런 코드 작성하느라 시간을 허비한 게 정말 아까운 기분이에요. 이 부분에서 이처럼 비효율적으로 코드를 짜는 건 정말 상상도 못할 정도로 어리석은 선택입니다. 게다가 이렇게 작성해놓고 오류가 발생할 확률이 아주 높아요. 이 코드가 제대로 돌아갈 가능성은 제로라고 봐도 무방해요. 솔직히, 내가 이 코드를 맡았다면 아예 다시 처음부터 끝까지 새로 짤 겁니다. 이건 그냥 시간이 아까워서 손 대고 싶지 않네요. 제발 이런 코드 작성하지 말고, 기본적인 것부터 다시 배우세요."

rhea-so commented at 2024-11-19 06:23:37

코드 리뷰에서 "착하게 쓰는 것"과 "나쁘게 쓰는 것"은 각각 장단점이 있지만, 올바른 선택은 상황과 목적에 따라 달라집니다. 그러나 "건설적인 피드백"이 가장 중요한 기준입니다. 이를 바탕으로 두 접근 방식을 비교하고, 올바른 선택을 분석해보겠습니다.

1. 착하게 쓰는 것 (긍정적이고 배려 깊은 피드백)

장점:

  • 상대방의 자존감을 지킬 수 있음: 코드 리뷰는 때때로 감정적인 문제를 일으킬 수 있습니다. 부정적인 피드백은 상대방이 방어적으로 변하게 만들 수 있기 때문에, 배려 깊은 피드백을 통해 그 사람이 더 쉽게 받아들일 수 있게 합니다.
  • 동기 부여: 긍정적이고 격려하는 피드백은 코드 작성자가 더 나은 방향으로 개선하려는 동기를 부여할 수 있습니다. 비판적이지 않더라도 좋은 피드백은 개선의 촉진제가 될 수 있습니다.
  • 건설적인 대화: 긍정적인 언어는 상대방에게 개선 방법에 대해 스스로 생각할 기회를 제공합니다. “이 부분은 이렇게 개선할 수 있겠네요” 같은 언급은 상호 협력적인 분위기를 조성합니다.

단점:

  • 문제의 본질을 놓칠 수 있음: 너무 부드럽고 긍정적인 피드백만 제공하면 문제를 정확히 짚어내지 못하거나, 중요한 개선점을 강조하지 못할 수 있습니다. 문제가 명확히 드러나지 않으면 코드 품질이 개선되지 않을 위험이 있습니다.
  • 필요한 경고를 놓칠 수 있음: 문제가 반복될 가능성이 있는 경우, 그 심각성을 잘 전달하지 못하면 작성자는 동일한 실수를 계속할 수 있습니다.

2. 나쁘게 쓰는 것 (강도 높은 비판적 피드백)

장점:

  • 문제의 심각성을 명확히 전달: 코드에서 심각한 문제를 명확히 짚어내고, 그로 인한 위험성을 강조할 수 있습니다. 리뷰어가 너무 부드럽지 않고 강하게 피드백을 주면, 상대방이 그 문제를 깊게 인식하고 수정하려는 의지가 생길 수 있습니다.
  • 즉각적인 개선 촉진: 문제를 강하게 지적하면, 피드백을 받은 사람이 빠르게 문제를 고치기 위해 노력할 수 있습니다. 개선이 급박하게 느껴지기 때문에 그에 따른 반응이 빠를 수 있습니다.

단점:

  • 방어적인 반응: 지나치게 부정적인 피드백은 코드 작성자를 방어적이고 방심하게 만들 수 있습니다. 이는 상호작용을 방해하고, 피드백을 받아들이기 어려운 환경을 만들 수 있습니다.
  • 동기 상실: 과도하게 비판적인 피드백은 코드 작성자가 실망하거나 의욕을 잃게 할 수 있습니다. 이는 장기적으로는 발전을 가로막을 수 있습니다.
  • 협업 분위기 악화: 비판적이고 공격적인 피드백은 팀 내의 분위기를 나쁘게 만들 수 있으며, 협업에 부정적인 영향을 줄 수 있습니다.
  • 올바른 선택: 건설적인 피드백 코드 리뷰에서 중요한 점은 "건설적인 피드백"을 주는 것입니다. 이는 상대방의 성장을 돕는 동시에 문제를 명확히 짚어내는 방식입니다. 긍정적인 언어를 사용하되, 문제가 발생한 부분에 대해서는 구체적으로 지적하고 개선 방법을 제시하는 것이 핵심입니다.

건설적인 피드백의 특징:

  • 구체적이고 명확한 문제 제시: 문제가 무엇인지, 왜 그것이 문제인지를 분명히 설명합니다.
  • 개선 방향 제시: 문제를 지적한 후, 어떻게 개선할 수 있을지 구체적인 해결책을 제시합니다.
  • 격려와 긍정적인 피드백 포함: 코드 작성자가 잘한 점도 함께 언급하며 동기 부여를 합니다. “이 부분은 잘 구현했어요. 다만 이 점에서 개선할 여지가 있어요”와 같은 접근이 좋습니다.

결론:

코드 리뷰는 단순히 잘못된 부분을 지적하는 것만이 아니라, 그 사람이 성장할 수 있도록 돕는 과정입니다. "착하게"와 "나쁘게"를 구분하기보다는 건설적이고 효과적인 피드백을 주는 것이 가장 올바른 선택입니다. 그렇게 해야 코드 작성자는 피드백을 잘 받아들이고, 개선할 수 있는 동기와 방향성을 가질 수 있습니다.

rhea-so commented at 2024-11-19 06:24:26

리뷰가 나쁘게 작성되었더라도 건설적인 피드백이면 괜찮을까에 대한 질문은 중요한 부분입니다. 건설적인 피드백은 내용의 개선을 촉진할 수 있기 때문에 긍정적인 측면이 있지만, 나쁜 방식으로 전달된다면 그 효과를 제대로 발휘하지 못할 수 있습니다.

다음은 이에 대한 자세한 분석입니다:

건설적인 피드백이란?

건설적인 피드백은 문제의 본질을 지적하고, 개선 방향을 제시하며, 긍정적인 방법으로 상대방을 돕는 피드백을 의미합니다. 핵심은 문제 해결을 돕고 상대방의 성장을 유도하는 것입니다.

나쁘게 작성된 피드백이란?

"나쁘게 작성된 피드백"은 감정적이고 공격적인 표현이 포함된 피드백을 말합니다. 예를 들어, "이 코드는 정말 형편없다" 또는 "이건 완전 쓰레기 코드야" 같은 표현들은 문제를 지적하긴 하지만, 그 자체로 상처를 줄 수 있고 상대방이 방어적으로 반응하게 만들 수 있습니다.

나쁘게 작성된 건설적인 피드백의 문제점:

  • 방어적 반응 유발: 피드백이 감정적으로 전달되면 코드 작성자는 피드백을 방어하려고 할 수 있습니다. 이는 실제로 문제를 고치기보다는 방어적인 태도를 취하게 만들고, 피드백을 받아들이기 어렵게 만듭니다.
  • 동기 부여의 상실: 피드백이 부정적이고 공격적으로 들리면, 코드 작성자가 의욕을 잃을 수 있습니다. 결과적으로 그 사람은 피드백을 수용하지 않거나, 실망하여 개선 의지를 잃을 수 있습니다.
  • 협업 분위기 악화: 팀에서의 피드백은 다른 사람들의 관계에 영향을 미칠 수 있습니다. 피드백이 나쁘게 작성되면, 팀 내 분위기가 부정적으로 변하고 협력적인 환경이 훼손될 수 있습니다.
  • 목표와 효과 상실: 건설적인 피드백의 목표는 개선을 촉진하는 것입니다. 그러나 감정적인 피드백은 코드 작성자에게 목표를 전달하는 것보다 감정을 상하게 하고, 결국 개선보다는 불필요한 갈등을 초래할 수 있습니다.

피드백은 어떻게 전달해야 할까?

  • 문제를 구체적으로 지적: 피드백은 반드시 구체적이어야 합니다. 무엇이 잘못됐는지, 왜 그것이 문제가 되는지를 명확히 설명해야 합니다.
  • 개선 방향을 제시: 문제를 지적한 후, 그 문제를 어떻게 해결할 수 있는지 구체적인 방법이나 대안을 제시해야 합니다. 이는 코드 작성자가 실질적으로 개선할 수 있도록 돕는 데 중요합니다.
  • 긍정적인 톤 사용: 피드백은 긍정적이고 존중하는 태도로 전달해야 합니다. "이 부분을 이렇게 바꾸면 더 효율적일 것 같아요" 또는 "이 점은 좋았지만, 여기에 이렇게 개선하면 더 좋을 것 같아요"와 같은 방식으로 피드백을 전달하면 상대방이 더 잘 받아들일 수 있습니다.
  • 격려 포함: 비판만 하는 대신, 잘한 부분에 대해서도 언급하면서 균형 잡힌 피드백을 제공하는 것이 중요합니다.

결론: 나쁘게 작성된 피드백은 건설적이지 않다

피드백이 건설적인 내용이라도 그 전달 방식이 나쁘면 효과가 반감됩니다. 피드백은 존중과 배려를 바탕으로 전달되어야 하며, 이는 상대방의 성장을 돕는 방향으로 이루어져야 합니다. 피드백이 감정적이고 공격적이라면, 그것은 건설적이지 않으며, 오히려 반감을 사고 개선을 저해할 수 있습니다.

따라서 피드백을 나쁘게 작성하는 것은 절대 바람직하지 않으며, 어떤 형태로든 감정적인 공격이나 비난을 피하고, 문제 해결에 집중하는 방식으로 피드백을 제공하는 것이 중요합니다.

rhea-so commented at 2024-11-19 06:28:19

리뷰를 작성하는 사람이 화가 나거나 감정적으로 불편한 상황에서 마인드 컨트롤을 하는 것은 매우 중요합니다. 감정이 앞서면 피드백이 건설적이지 않거나 공격적으로 변할 수 있기 때문에, 효과적인 피드백을 주기 위해 감정을 잘 다스려야 합니다. 여기서는 감정을 통제하고, 더 생산적이고 건설적인 리뷰를 작성할 수 있는 방법을 제시해 드리겠습니다.

1. 잠시 시간을 두고 마음을 진정시키기

  • 감정을 가라앉히는 시간: 화가 나거나 불편한 상황에서 바로 피드백을 작성하는 것은 효과적이지 않습니다. 먼저 몇 분 동안 숨을 고르고, 잠시 다른 일을 하며 마음을 진정시키세요. 그렇게 하면 감정적인 반응을 줄이고, 차분하게 상황을 객관적으로 분석할 수 있습니다.
  • 감정을 인식하고 인정하기: 화가 난 감정을 억누르기보다는 자신이 화가 나 있다는 사실을 인정하는 것이 중요합니다. "지금 나는 이 부분 때문에 화가 나 있다"라고 스스로 인식하면 감정을 통제하기가 더 쉽습니다.

2. 객관적인 관점에서 접근하기

  • 문제에 집중하기: 사람이 아닌 문제에 집중하세요. 화가 나면 사람에 대한 감정이 개입되기 쉽지만, 피드백의 목표는 사람을 비난하는 것이 아니라 문제 해결에 초점을 맞추는 것입니다. 리뷰를 작성할 때, "이 코드가 문제다"라는 사실을 지적하고, 그 문제를 어떻게 개선할 수 있을지를 중심으로 피드백을 작성하세요.
  • 문제의 본질 파악: 화가 나면 문제의 본질을 놓칠 수 있습니다. 문제의 구체적인 원인과 해결책을 냉철하게 분석하여 리뷰에서 그것을 명확히 제시하세요. 감정이 섞이면 개선 방향이 흐려질 수 있으므로, 최대한 객관적으로 판단하려고 노력하세요.

3. 긍정적인 언어 사용하기

  • 비판보다는 개선을 강조: 화가 나더라도 비판적인 언어보다는 개선적인 언어를 사용하는 것이 중요합니다. 예를 들어, "이건 엉망이에요"보다는 "이 부분은 이렇게 개선할 수 있습니다"라고 표현하는 것이 더 건설적입니다.
  • 공손하고 존중하는 태도: 피드백을 받을 사람은 비판을 방어적으로 받아들이기 쉽습니다. 공손하고 존중하는 태도로 피드백을 주면 그 사람도 더 쉽게 받아들일 수 있습니다. 예를 들어, "이 부분은 잘했어요, 다만 여기서 개선할 점이 있습니다"라는 형태로 피드백을 제공하면 상대방도 긍정적으로 받아들일 가능성이 높습니다.

4. 피드백의 목표를 명확히 하기

  • 성장과 개선을 목표로 삼기: 피드백의 목적은 상대방의 성장과 개선을 돕는 것입니다. 피드백을 통해 그 사람이 더 나은 방향으로 나아갈 수 있도록 돕는 것이 중요합니다. 화가 나더라도 상대방이 개선할 수 있는 기회를 제공하려는 마음가짐을 유지하세요.
  • 부정적인 감정 대신, 건설적인 조언 제공: "이건 잘못된 코드예요"보다는 "이 코드를 더 효율적으로 만들기 위한 방법은 이렇게 될 수 있습니다"와 같은 건설적인 조언을 제공하세요. 이렇게 하면 피드백을 받은 사람이 실수에서 배우고 개선할 수 있게 됩니다.

5. 일관된 피드백 패턴 유지하기

  • 피드백의 일관성: 리뷰는 일관된 패턴으로 제공되어야 합니다. 감정적으로 리뷰할 때마다 다른 스타일의 피드백을 주게 되면, 상대방은 그 패턴을 예측하기 어려워지고, 혼란을 줄 수 있습니다. 피드백의 스타일을 일정하게 유지하고, 항상 구체적이고 명확한 방향을 제시하는 방식으로 피드백을 작성하세요.
  • 피드백을 주는 사람의 태도: 일관된 피드백은 팀원에게 신뢰감을 주고, 그들이 리뷰를 받을 때마다 기대감을 가질 수 있게 만듭니다. 피드백을 받을 때마다 감정적으로 휘둘린다면, 그 팀원의 성장을 돕기 어렵습니다.

6. 자신의 감정을 표현하기

피드백을 주는 사람이 감정을 표현하는 것도 중요할 수 있습니다. 예를 들어, "이 부분을 보고 조금 놀랐어요"라든지 "이 코드를 보고 약간 당황했습니다"라고 솔직하게 감정을 표현할 수 있습니다. 단, 이 표현은 비판적이기보다는 이해와 개선을 위한 방식으로 전달해야 합니다.

결론:

화가 나거나 불편한 감정을 가지고 리뷰를 작성해야 할 때, 감정을 가라앉히고, 문제에 집중하는 것이 중요합니다. 감정을 잘 다스리고 객관적이고 건설적인 피드백을 제공하면, 피드백을 받는 사람도 더 잘 받아들이고 개선할 수 있습니다. 마인드 컨트롤을 통해 긍정적이고 생산적인 대화로 이어지게 함으로써, 팀의 성장을 촉진하고 협업 환경을 개선할 수 있습니다.

rhea-so commented at 2024-11-19 06:30:22

당신이 작성한 리뷰가 감정적인지 아닌지 확인하는 방법은 주로 언어의 선택, 톤, 그리고 피드백의 내용을 기준으로 분석할 수 있습니다. 감정적이지 않은 피드백은 객관적이고 건설적인 방향으로 제시되어야 하며, 감정을 배제하고 문제 해결에 집중하는 방식이어야 합니다. 아래는 감정적인 리뷰인지 아닌지를 점검할 수 있는 구체적인 방법들입니다:

1. 언어의 선택

  • 비판적이고 공격적인 단어 사용: "형편없다", "엉망이다", "쓰레기다", "이해할 수 없다" 같은 단어들이 포함되면 감정적입니다. 이런 표현은 상대방을 비난하는 느낌을 주며, 문제 해결을 위한 대화로 이어지기보다는 방어적인 태도를 유도할 수 있습니다.
  • 과장된 표현: "최악이다", "말도 안 된다", "어쩔 수 없다" 등 지나치게 과장된 표현은 감정적이며, 객관적인 판단을 왜곡할 수 있습니다.
  • 모호하고 감정적인 단어: "짜증난다", "불쾌하다", "화가 난다" 같은 감정적인 단어들은 문제를 해결하려는 의도보다는 감정을 표현하는 데 초점이 맞춰집니다. 이런 언어는 피드백을 받는 사람이 어떻게 개선해야 할지에 대한 구체적인 정보를 제공하지 않습니다.

2. 톤(말투)의 분석

  • 공격적인 톤: 피드백에서 비난이나 억압적인 말투가 사용되면 감정적입니다. 예를 들어, "이건 완전히 잘못됐어요, 다시 해야 해요!"라는 표현은 강압적이고 공격적인 느낌을 줍니다.
  • 무시하는 듯한 톤: "이게 무슨 코드야?" 또는 "이건 말도 안 된다"처럼 상대방을 무시하는 듯한 언어는 감정적으로 보입니다. 피드백이 존중의 태도를 유지해야 상대방이 받아들이기 쉽습니다.
  • 비하적인 표현: "이건 아마 초보자가 작성한 코드 같아요"와 같은 말은 상대방을 비하하는 느낌을 주고, 피드백의 목적을 흐리게 만듭니다.

3. 피드백의 목적

  • 문제 해결에 집중하는지 확인: 감정적이지 않은 피드백은 문제를 정의하고 그에 대한 해결책을 제시합니다. 예를 들어, "이 부분에서 이렇게 변경하면 더 효율적일 것입니다" 또는 "이 코드를 좀 더 간결하게 만들 수 있습니다"처럼 구체적인 개선 방안이 포함되어야 합니다.
  • 성장 유도: 피드백은 성장을 돕는 방향으로 작성되어야 하며, 부정적인 평가보다는 개선 방향을 중심으로 제시해야 합니다. "이 코드의 문제점은 이렇습니다. 이렇게 하면 더 나아질 수 있을 것입니다"라는 식의 피드백은 감정적이지 않습니다.
  • 비판을 건설적인 피드백으로 전환: 감정적으로 비판하는 대신, "이 부분은 개선이 필요합니다. 이를 해결하는 방법은 다음과 같습니다…"와 같은 표현을 사용하는 것이 바람직합니다.

4. 상대방을 비난하지 않는가

사람을 비난하거나 공격하는 내용이 포함되면 감정적입니다. 예를 들어, "너무 실망했다" 또는 "이렇게 할 줄 몰랐다"는 피드백은 상대방의 능력 자체를 부정하는 느낌을 줄 수 있습니다. 코드나 작업을 비판하되, 그 행위에만 초점을 맞추고 사람 자체에 대한 비판을 피하는 것이 중요합니다. 예를 들어, "이 코드는 비효율적입니다. 효율성을 높이려면 이렇게 수정할 수 있습니다"와 같이 표현하면, 사람에 대한 공격 없이 문제 해결에 집중할 수 있습니다.

5. 피드백의 균형

  • 긍정적인 피드백 포함 여부: 감정적이지 않은 피드백은 균형을 맞춰야 합니다. 즉, 잘한 부분을 먼저 언급하고, 그 뒤에 개선이 필요한 부분을 제시하는 방식입니다. 예를 들어, "이 부분은 잘 구현되었어요. 다만, 다음과 같은 방식으로 개선할 수 있을 것 같습니다"처럼 긍정적인 면을 먼저 언급하면 상대방이 방어적인 태도를 취하지 않습니다.

감정적이지 않은 피드백 예시:

  • 감정적 피드백: "이 코드는 완전히 엉망이에요! 이렇게 짠 코드를 누가 고칠 수 있겠어요?"
  • 건설적인 피드백: "이 코드에서 중복된 부분이 많아 유지보수가 어려울 수 있습니다. 이 부분을 함수로 분리하면 코드가 더 깔끔해지고, 향후 수정이 쉬워질 것입니다."

감정적이지 않은 피드백을 위한 체크리스트:

  • 피드백에서 비판적 언어(형편없다, 쓰레기, 최악 등)를 사용하지 않았는가?
  • 해결책을 제시하며, 단순한 비판이 아닌 개선 방안을 포함시켰는가?
  • 피드백의 톤이 존중을 바탕으로 하고 있는가?
  • 상대방의 성장을 돕기 위한 방향으로 피드백이 구성되었는가?
  • 긍정적인 부분을 먼저 언급한 후, 개선점을 제시했는가?

이 기준들을 통해 리뷰가 감정적이지 않은지 확인할 수 있으며, 객관적이고 건설적인 피드백을 제공하는 데 도움이 됩니다.

rhea-so commented at 2024-11-19 06:35:30

"이게 진짜 코드라고? 내가 이렇게 엉망인 코드를 본 건 처음이에요. 솔직히 말해서, 이건 코드도 아니에요. 그냥 아무렇게나 쓰레기처럼 던져놓은 것 같아요. 이 코드가 제대로 동작한다고 생각하나요? 무슨 생각으로 이렇게 짰는지 도저히 이해할 수 없어요. 내가 프로그래밍 처음 시작했을 때도 이런 실수는 안 했어요. 이건 그냥 기본도 모르는 수준이고, 내가 봤을 땐 아예 프로그래밍을 시작도 안 했을 수도 있을 것 같아요. 변수명? 그게 뭐죠? 대체 어떤 생각으로 저렇게 이름 지었는지 알 수가 없어요. 나 같으면 그거 한 줄만 봐도 몇 번이나 바꿨을 텐데. 주석은 왜 없는 건지, 그거 하나만 해도 기본 중의 기본이잖아요. 이런 것도 모르면 코드 리뷰 할 자격도 없어요. 나 때는 이런 기본적인 것 하나하나 신경 안 쓰면 그냥 팀에서 아예 말도 못 꺼냈어요. 이런 코드 보니까 차라리 내가 다시 짜는 게 낫겠어요. 이 코드는 한마디로 말해서 '시간 낭비'예요. 뭐 하나 제대로 짜지 못한 걸 제출하는 건 진짜 정신이 나간 사람만 할 짓이에요. 나중에 이 코드로 버그 잡으려고 고생하는 건 내가 아니라 다른 팀원들이에요. 그때 가서 후회하지 말고, 차라리 지금이라도 다 고쳐놓는 게 나아요. 이렇게 짜놓고 팀에서 인정받을 거라 생각한 거면 착각이에요. 내 눈엔 그냥 철학적으로도 부족한 코드, 초등학생 수준의 프로그래밍처럼 보이네요. 제발 이 코드로 다시 제출하지 마세요. 다들 당신을 두고 뭐라 할지 상상이 가네요."

rhea-so commented at 2024-11-19 06:35:35

"진짜, 이게 코드라고 제출한 거예요? 내가 이런 코드 보게 될 줄은 몰랐네요. 이걸 봤을 때, 예전에는 이런 걸 코딩이라 하지도 않았어요. '이 정도면 되겠지' 하고 짰다면, 그건 정말 초보자도 아니고 그냥 프로그래밍을 처음 접한 사람들만 하는 실수죠. 내가 20대 때는 이런 기본적인 부분은 다 이해하고 넘어갔었고, 이렇게 엉망으로 짜면 바로 코드 리뷰에서 지적받고 다시 처음부터 짰어요. 이 코드는 기본이 안 되어 있어요. 변수명? 뭐 하나 의미 있는 게 없네요. 그냥 아무렇게나 지은 것 같은데, 이렇게 하시면 안 됩니다. 옛날엔 변수명부터 팀에서 다 맞춰가며 코딩했죠. 그때는 누가 이렇게 엉망으로 짜면 다들 눈치챘어요. 주석도 없고, 코드가 뭐하는 건지 하나도 모르겠어요. 이걸 아무런 설명 없이 팀에 제출하다니, 정말 아무 생각 없이 일하는 것처럼 보이네요. 예전 같으면, 이런 코드 작성하면 내가 바로 교훈을 줬을 텐데요. 테스팅? 그게 뭐죠? 이 코드 보니까 테스트도 제대로 안 했겠죠. 나중에 버그 날 때 그 수습하는 거 생각하면 벌써부터 머리가 아파요. 요즘 사람들은 이렇게 기본도 안 지키는구나. 이건 다시 처음부터 새로 짜는 게 낫다고 봐요. 내가 봤을 땐 이 코드 보고 나서 다들 실망할 거예요. 과거에 내가 일하던 팀에서는 이런 코드 절대 용납 안 했어요. 진짜, 이제는 이런 것도 기본부터 다시 배워야 될 때인 거 같네요. 당장 이런 코드 다시 작성하지 않도록 신경 쓰세요."

rhea-so commented at 2024-11-19 06:35:41

"이 코드가 왜 이렇게 나왔는지 이해가 안 가네요. 예전엔 이런 것도 다 기본 중의 기본이었거든요. 이 코드, 정말 프로그래밍을 좀 한다는 사람은 절대 이렇게 작성하지 않아요. 이 정도면 아마 입사한 지 6개월도 안 된 초보자 수준 같아요. 변수명부터가 뭐가 뭔지 알 수가 없네요. 이런 식으로 짜면 나중에 팀원들이나 다른 개발자들이 얼마나 고생할지 생각은 해봤나요? 주석도 없고, 코드도 흐름이 하나도 안 보여요. 예전에 다들 이런 문제는 다 해결하고 넘어갔던 거고, 이런 기본적인 걸 못 하면 팀에서 일하는 게 어려워요. 왜 이런 코드를 제출한 건지 정말 이해가 안 돼요. '그냥 이렇게 하면 되겠지'라고 생각한 거 같은데, 그런 생각은 초보자가 하는 거고, 이렇게 짜놓고 테스트도 안 한 거 같고, 버그 나면 다른 사람이 고치려고 몇 배로 고생할 거예요. 이 코드는 정말 좀 심각해요. 지금 이걸 보고 내가 고쳐야 한다면, 다시 처음부터 새로 짜는 게 훨씬 나을 것 같아요. 옛날엔 이런 실수하면 다들 기본적으로 고쳤거든요. 아마 예전엔 팀에서도 이런 거 가지고 고쳐야 했으면 벌써 몇 번은 쫓겨났을 거예요. 나중에 이런 거 다시 하지 않도록 좀 더 신경 쓰세요."

rhea-so commented at 2024-11-19 06:35:53

GPT 꼰대력 장난이 아니다!

Open in GitHub Gist
Back to Home